home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / pine3.92 / contrib / carmel / c-client / carmel2.h < prev    next >
C/C++ Source or Header  |  1994-08-31  |  7KB  |  201 lines

  1. /*----------------------------------------------------------------------
  2.  
  3.     T H E   C A R M E L 2   M A I L   F I L E   D R I V E R
  4.  
  5.  Author(s):   Laurence Lundblade
  6.               Baha'i World Centre
  7.               Data Processing
  8.               Haifa, Israel
  9.           Internet: lgl@cac.washington.edu or laurence@bwc.org
  10.               September 1992
  11.  
  12.  Last Edited: Aug 31, 1994
  13.   ----------------------------------------------------------------------*/
  14.  
  15. /* Command bits from carmel2_getflags() */
  16.  
  17. #define fSEEN     1
  18. #define fDELETED  2
  19. #define fFLAGGED  4
  20. #define fANSWERED 8
  21. #define fRECENT  16
  22.  
  23. /* Kinds of locks for carmel2_lock() */
  24.  
  25. #define READ_LOCK   0
  26. #define WRITE_LOCK  1
  27.  
  28.  
  29. /* Carmel2 I/O stream local data */
  30.  
  31. typedef struct _local2 {
  32.   MESSAGECACHE **mc_blocks;
  33.   long           cache_size;
  34.   FILE          *index_stream;
  35.   char          *stdio_buf;
  36.   char          *msg_buf;
  37.   unsigned long  msg_buf_size;
  38.   unsigned long  msg_buf_text_offset;
  39.   char          *msg_buf_text_start;
  40.   char          *buffered_file;
  41.   long           read_lock_mod_time, write_lock_mod_time;
  42.   long           index_size;
  43.   unsigned int   dirty:1;
  44.   unsigned int   carmel:1;  /* It's a carmel file instead of carmel2 */
  45.   unsigned int   buffered_header_and_text:1;
  46.   unsigned int   new_file_on_copy:1;
  47.   char        *(*calc_paths)();
  48.   long         (*aux_copy)();
  49. } CARMEL2LOCAL;
  50.  
  51.  
  52. struct carmel_mb_name {
  53.     char  version[2]; /* \0 for version 1, ASCII digit  and \0 for other */
  54.     char *user;    /* String of userid for other user names */
  55.     char *mailbox; /* Mailbox name */
  56. };
  57.  
  58.  
  59. #define MC(x) (&(LOCAL->mc_blocks[(x) >> 8][(x) & 0xff]))
  60. #define LOCAL ((CARMEL2LOCAL *) stream->local)
  61. #define CARMEL_MAXMESSAGESIZE (20000000)  /* 20Mb */
  62. #define CARMEL_MAX_HEADER        (64000)  /* 64K for DOS (someday?) */
  63. #define CARMEL_PATHBUF_SIZE       (1024)
  64. #define CARMEL2_INDEX_BUF_SIZE   (20000)  /* Size for carmel2 index FILE buf */
  65. #define CARMEL_NAME_CHAR           ('#')  /* Separator for carmel names */
  66. #define CARMEL_NAME_PREFIX     "#carmel"  /* Prefix for all mailbox names */
  67.  
  68.  
  69. /* Kinds of paths that for carmel_calc_path */
  70.  
  71. #define CalcPathCarmel2Index     1
  72. #define CalcPathCarmel2Data      2
  73. #define CalcPathCarmel2MAXNAME   3
  74. #define CalcPathCarmel2WriteLock 4
  75. #define CalcPathCarmel2ReadLock  5
  76. #define CalcPathCarmel2Expunge   6
  77.  
  78.  
  79. /* These are all relative to the users home directory */
  80.  
  81. #define CARMEL2_INDEX_DIR  "Carmel2Mail"
  82. #define CARMEL2_DIR        "Carmel2Mail"
  83. #define CARMEL2_MSG_DIR    "Carmel2Mail/.Messages"
  84. #define CARMEL2_MAXFILE    "Carmel2Mail/.MAXNAME"
  85.  
  86.  
  87. #define BEZERKLOCKTIMEOUT 5
  88.  
  89. /* Function prototypes */
  90.  
  91. #ifdef ANSI
  92. DRIVER        *carmel2_valid(char *);
  93. int         carmel2_isvalid(char *);
  94. char        *carmel2_file(char *, char *);
  95. void        *carmel2_parameters();
  96. void         carmel2_find(MAILSTREAM *, char *);
  97. void         carmel2_find_bboards(MAILSTREAM *, char *);
  98. void         carmel2_find_all(MAILSTREAM *, char *);
  99. void         carmel2_find_all_bboards(MAILSTREAM *, char *);
  100. long         carmel2_subscribe();
  101. long         carmel2_unsubscribe();
  102. long         carmel2_subscribe_bboard();
  103. long         carmel2_unsubscribe_bboard();
  104. long         carmel2_create(MAILSTREAM *, char *);
  105. long         carmel2_delete(MAILSTREAM *, char *);
  106. long         carmel2_rename(MAILSTREAM *, char *, char *);
  107. MAILSTREAM  *carmel2_open(MAILSTREAM *);
  108. int          carmel2_open2(MAILSTREAM *, char *);
  109. void         carmel2_close(MAILSTREAM *);
  110. void         carmel2_fetchfast(MAILSTREAM *, char *);
  111. void         carmel2_fetchflags(MAILSTREAM *, char *);
  112. ENVELOPE    *carmel2_fetchstructure(MAILSTREAM *, long, BODY **);
  113. char        *carmel2_fetchheader(MAILSTREAM *, long);
  114. char        *carmel2_fetchtext(MAILSTREAM *, long);
  115. char        *carmel2_fetchbody(MAILSTREAM *, long, char *, unsigned long *);
  116. void         carmel2_setflag(MAILSTREAM *, char *, char *);
  117. void         carmel2_clearflag(MAILSTREAM *, char *, char *);
  118. void         carmel2_search(MAILSTREAM *, char *);
  119. long         carmel2_ping(MAILSTREAM *);
  120. void         carmel2_check(MAILSTREAM *);
  121. void         carmel2_expunge(MAILSTREAM *);
  122. long         carmel2_copy(MAILSTREAM *, char *, char *);
  123. long         carmel2_move(MAILSTREAM *, char *, char *);
  124. void         carmel2_gc(MAILSTREAM *, long);
  125. void        *carmel2_cache(MAILSTREAM *, long, long);
  126. long         carmel2_append(MAILSTREAM *, char *, STRING *);
  127. int          carmel2_write_index(ENVELOPE *, MESSAGECACHE *, FILE *);
  128. char        *carmel2_readmsg(MAILSTREAM *, int, long, int);
  129. int          carmel2_lock(CARMEL2LOCAL *, char *, int);
  130. void         carmel2_unlock(CARMEL2LOCAL *, char *, int);
  131. int          carmel2_update_lock(CARMEL2LOCAL *, char *, int);
  132. int          carmel2_check_dir(char *);
  133. void         carmel2_parse_bezerk_status(MESSAGECACHE *, char *);
  134. int          carmel2_append2(MAILSTREAM *, CARMEL2LOCAL *, char *, char *,
  135.                              char *, STRING *);
  136. char        *month_abbrev2(int);
  137. void         carmel2_rfc822_date(MESSAGECACHE *, char *);
  138. char        *carmel_pretty_mailbox(char *);
  139. struct carmel_mb_name *
  140.              carmel_parse_mb_name(char *, char);
  141. void         carmel_free_mb_name(struct carmel_mb_name *);
  142. int          strucmp2(char *, char *);
  143. int          struncmp2(char *, char *, int);
  144.  
  145. #else  /* ANSI */
  146.  
  147.  
  148. DRIVER        *carmel2_valid();
  149. int         carmel2_isvalid();
  150. char        *carmel2_file();
  151. void        *carmel2_parameters();
  152. void         carmel2_find();
  153. void         carmel2_find_bboards();
  154. void         carmel2_find_all();
  155. void         carmel2_find_all_bboards();
  156. long         carmel2_subscribe();
  157. long         carmel2_unsubscribe();
  158. long         carmel2_subscribe_bboard();
  159. long         carmel2_unsubscribe_bboard();
  160. long         carmel2_create();
  161. long         carmel2_delete();
  162. long         carmel2_rename();
  163. MAILSTREAM  *carmel2_open();
  164. int          carmel2_open2();
  165. void         carmel2_close();
  166. void         carmel2_fetchfast();
  167. void         carmel2_fetchflags();
  168. ENVELOPE    *carmel2_fetchstructure();
  169. char        *carmel2_fetchheader();
  170. char        *carmel2_fetchtext();
  171. char        *carmel2_fetchbody();
  172. void         carmel2_setflag();
  173. void         carmel2_clearflag();
  174. void         carmel2_search();
  175. long         carmel2_ping();
  176. void         carmel2_check();
  177. void         carmel2_expunge();
  178. long         carmel2_copy();
  179. long         carmel2_move();
  180. void         carmel2_gc();
  181. void        *carmel2_cache();
  182. long         carmel2_append();
  183. int          carmel2_write_index();
  184. char        *carmel2_readmsg();
  185. int          carmel2_lock();
  186. void         carmel2_unlock();
  187. int          carmel2_update_lock();
  188. int          carmel2_check_dir();
  189. void         carmel2_parse_bezerk_status();
  190. int          carmel2_append2();
  191. char        *month_abbrev2();
  192. void         carmel2_rfc822_date();
  193. char        *carmel_pretty_mailbox();
  194. struct carmel_mb_name *
  195.              carmel_parse_mb_name();
  196. void         carmel_free_mb_name();
  197. int          strucmp2();
  198. int          struncmp2();
  199.  
  200. #endif  /* ANSI */
  201.